//
// Copyright (C) [2024] Xingyun Integrated Circuit, Inc.
//
// GreenCode was a private technology asset of Xingyun Integrated Circuit， Inc （Confidential）
//  Author: Shawn.Tan
//  Date : 2025.10.28
//
//  History : Initial Version 2025.10.28
//
//
#ifndef Green_ConstraintGPGPU_H
#define Green_ConstraintGPGPU_H

#include <string>
#include <vector>

#include "Defines.h"
#include "Enums.h"
#include "Constraint.h"
#include ARCH_ENUM_HEADER

namespace Green {

  /*!
    \struct ConstraintOneResult
    \brief Return information regarding constraint operations that has at the most one remaining Constraint object to handle.
  */

  /*!
    \class ConstraintSetGPGPU
    \brief Container of a set of constraints.
  */
  class ConstraintSetGPGPU : public ConstraintSet {
  public:
    using ConstraintSet::ConstraintSet; //!< Constructor with initial range given.

    ~ConstraintSetGPGPU() {}; //!< Destructor.
    using ConstraintSet::operator=; //!< Copy assignment operator.
    using ConstraintSet::operator==;
    using ConstraintSet::operator!=;

    void SetWarpLimit(uint64 limit);  // !< Set the Warptlimit for GPGPU
    uint64 GetWarpLimit() const;  // !< Set the Warptlimit for GPGPU
    
  private:
    uint32_t mWarpsLimit = 0; 
#ifdef UNIT_TEST
  public:
    static uint32 msConstraintDeleteCount; //!< Variable to assist unit-testing.
#endif
  };
}

#endif
